//
//  OAuthViewController.swift
//  Weibo10
//
//  Created by 吕昱坪 on 15/12/9.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD
//用户登录控制器
class OAuthViewController: UIViewController {
    
    //属性定义在最上面 因为整个控制器都是用它加载的
    private lazy var webView = UIWebView()
    
     //MARK: - 监听方法
    @objc private func close(){
        
        SVProgressHUD.dismiss()
        
        //modal出来的控制器关闭用 dismiss
         dismissViewControllerAnimated(true, completion: nil)
    }
    
    ///自动填充用户名和密码 - Web注入（以代码的方式向web页面添加内容）
    @objc private func autoFill(){
//        674841689lv@sina.com
//        13891433483lxx
        let js = "document.getElementById('userId').value = '674841689lv@sina.com';" + "document.getElementById('passwd').value = ('13891433483lxx');"
        
        //让 webView 执行javascript
        webView.stringByEvaluatingJavaScriptFromString(js)
    }
    
    //MARK:-- 设置界面
    override func loadView() {
        view = webView
        webView.delegate = self
        
        //设置导航栏
        title = "登录新浪微博"
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: .Plain, target: self, action: "close")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: .Plain, target: self, action: "autoFill")
    }
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //加载页面
        self.webView.loadRequest(NSURLRequest(URL: NetworkTools.sharedTools.oauthURL))
    }
}

//MARK: - UIWebViewDelegate
extension OAuthViewController:UIWebViewDelegate {
    
    /**
     将要加载请求的代理方法
     
     - parameter webView:         webView
     - parameter request:         将要加载的请求
     - parameter navigationType:  navigationType 页面跳转的方式
     - returns:                   返回 false 不加载，返回 true继续加载
     */
    //如果ios的代理方法中有返回 bool, 通常返回 true，返回 false 不能正常工作
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //目标：如果是百度就不加载
        //1.判断访问的主机是否是 www.baidu.com
        //从请求中拿到URL  URL中一定有内容，主机头是否为www.baidu.com
    guard let url = request.URL where url.host == "www.baidu.com" else{
        
        return true
        }//  guard在这里是守卫，守卫访问百度才会有反应
        
        
    //2.从百度地址的 URL中提取 'code=' 是否存在
        guard let query = url.query where query.hasPrefix("code=") else {
        print("取消授权")
        
        close()
        
        return false
        }
        
    //3.从 query 字符串中提取 ‘code=’后面的授权码
        let code = query.substringFromIndex("code=".endIndex)
        
        print(query)
        print("授权码是" + code)
        
    //4.加载 accessToken
        
        UserAccountViewModel.sharedUserAccount.loadAccessToken((code)) { (isSuccessed) -> () in
            
            //finished 完整代码
            if !isSuccessed{
                
                SVProgressHUD.showInfoWithStatus("您的网络不给力")
                //延迟执行 延迟一秒
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
//                    self.close()
//                })
                
//                delay(0.5, callFunc: { () -> () in
//                    self.close()
//                })
           //相当于上面的代码  尾随闭包的特点是当闭包是最后一个参数的时候可以提前结束
            delay(0.5){ self.close() }

                return
            }
               print("成功了")
            
            //dismissViewControllerAnimated 方法不会将控制器销毁，这里给后面加尾随闭包,保证modal出的控制器彻底销毁之后在去发通知，切换界面
            self.dismissViewControllerAnimated(false){
               
                //停止指示器
                SVProgressHUD.dismiss()
                
                //通知中心是同步的，一旦发送通知，会先执行监听方法，知道结束后才去执行后续的代码
                
                NSNotificationCenter.defaultCenter().postNotificationName(WBSwitchRootViewControllerNotification, object: "welcome")
            }
        }
        
        
               return false
    }
    
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        
        SVProgressHUD.dismiss()
    }
}






